package cl.tinet.trainee.tarea6b.dao;

import java.util.ArrayList;

import javax.ejb.Remote;

import cl.tinet.trainee.tarea6b.model.Usuario;

/**
 * Interfaz que define los metodos a implementar por la clase DAO.
 * @author Frmancil
 *
 */
@Remote
public interface UsuarioIDAO {

    /**
     * Recibe del bean un usuario y lo agrega a la base de datos.
     * 
     * @param nuevoUsuario
     *            Es el objeto usuario que recibe el metodo y agrega a la base
     *            de datos.
     */
    void agregar(Usuario nuevoUsuario);

    /**
     * Recibe del bean un usuario y lo elimina de la base de datos.
     * 
     * @param usuarioAEliminar
     *            Es el objeto usuario que recibe el metodo, para buscarlo y
     *            eliminar a su par.
     */
    void borrar(Usuario usuarioAEliminar);

    /**
     * Recibe del bean un usuario y lo actualiza a la base de datos.
     * 
     * @param usuarioAActualizar
     *            Es el objeto usuario que recibe el metodo, para buscarlo y
     *            actualizar sus datos.
     */
    void actualizar(Usuario usuarioAActualizar);

    /**
     * Recibe del bean un usuario y lee sus atributos desde la base de datos.
     * 
     * @param username
     *            Atributo para hacer busqueda de objeto.
     * @return Usuario encontrado es retornado para desplegar sus datos.
     */
    Usuario leer(String username);

    /**
     * Recibe del bean un String con el atributo username y lee sus atributos
     * desde la base de datos.
     * 
     * @param usuarioABuscar
     *            Objeto tipo usuario que se busca en la base de datos.
     * @return Usuario encontrado es retornado para desplegar sus datos.
     */
    Usuario buscar(Usuario usuarioABuscar);

    /**
     * Metodo que retorna la lista de todos los usuarios.
     * 
     * @return Retorna una lista con todos los usuarios de la base de datos.
     */
    ArrayList<Usuario> listar();
}
